#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<string.h>
using namespace std;
#define ElemType int
typedef struct LNode{
	ElemType data;
	struct LNode *next;
}LNode,*LinkList;
int k;
LNode* InitList(LinkList L)
{
	cout<<"初始化链表"<<'\n'; 
	L=new LNode;
	L->next=NULL;
	cout<<"初始化成功"<<'\n';
	return L;
}
LNode *q1=new LNode;
LNode *q2=new LNode;
LNode *q3=new LNode;
void ListInsert(LinkList &L,ElemType e)
{
	LNode *p1=new LNode;
	p1=L;
	while(p1->next)
	{
		p1=p1->next;
	}
	LNode *p=new LNode;
	p->data=e;
	p->next=p1->next;
	p1->next=p;

}
int ListLength(LinkList L)
{
    static int aa=0;
    q1=L;
    if(q1->next)
    {
        aa++;
        ListLength(q1->next);
    }
    return aa;
}
double ListAverage(LinkList &L,ElemType a,int b)
{
    if(!L->next)  
    {
        double c=0;
        c=  (double)a/b;
        return c;
    } 
    
    ListAverage(L->next,a+L->next->data,b+1);
}
ElemType GetElem(LinkList L,int d)
{
    q3=L->next;
    if(q3&&d!=k)
    {
        GetElem(q3,d+1);
    }
    return q3->data;
}
int main()
{
    LinkList L;
    L=InitList(L);
    char c;
    cout<<"输入要尾插的元素"<<'\n';
    c=getchar();
    while(c!='\n')
    {        
        if(c!=' ')
        ListInsert(L,(ElemType)(c-'0'));
        c=getchar();
    }
    cout<<"单链表的长度是"<<ListLength(L)<<'\n';
    printf("单链表平均数是%.2lf\n",ListAverage(L,0,0));
    cout<<"输入要获取的第k个元素"<<'\n';
    cin>>k;
    cout<<"第k个元素是"<<GetElem(L,1)<<'\n';
    cout<<"实验结束"<<'\n';
    system("pause");
    
}